﻿using UnityEditor;
using UnityEngine;

namespace HKTools
{
    /// <summary>
    /// HK_FirstPersonTrigger 中 TriggerType 唯一性检测
    /// </summary>
    public class FirstPersonTriggerUniqueAttribute : PropertyAttribute
    {

    }


#if UNITY_EDITOR
    [CustomPropertyDrawer(typeof(FirstPersonTriggerUniqueAttribute))]
    public class TriggerUniqueDrawer : PropertyDrawer
    {
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            HK_FirstPersonTrigger curTrigger = property.serializedObject.targetObject as HK_FirstPersonTrigger;

            // 获取所有 HK_BaseTarget 实例  
            HK_FirstPersonTrigger[] allTriggers = Object.FindObjectsByType<HK_FirstPersonTrigger>(FindObjectsSortMode.InstanceID);

            // 在每次绘制时初始化
            bool isUnique = true;

            foreach (HK_FirstPersonTrigger otherTrigger in allTriggers)
            {
                if (curTrigger == otherTrigger)
                {
                    // 跳过当前目标 
                    continue;
                }

                SerializedProperty otherProperty = new SerializedObject(otherTrigger).FindProperty(property.propertyPath);

                if (otherProperty != null)
                {
                    // 获取当前目标的值  
                    FirstPersonTriggerEnum currentValue = property.GetTriggerEnum();
                    // 获取其他目标的值  
                    FirstPersonTriggerEnum otherValue = otherProperty.GetTriggerEnum();

                    if (currentValue.value == otherValue.value)
                    {
                        isUnique = false; // 找到重复值  
                        break; // 找到重复值后直接退出循环  
                    }
                }
            }

            Color originalColor = GUI.backgroundColor;

            if (!isUnique)
            {
                // 设置背景色为红色
                GUI.backgroundColor = Color.red;
            }

            // 绘制属性字段 
            EditorGUI.PropertyField(position, property, label);

            // 恢复原始颜色
            GUI.backgroundColor = originalColor;

            if (!isUnique)
            {
                // 调整帮助文本框的位置，使其位于枚举字段下方,增加了一行的高度和一些垂直间距
                position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
                EditorGUI.HelpBox(position, $"{property.displayName} 的值在其Trigger中已存在！请确保唯一性！", MessageType.Error);

                GUILayout.Space(10);
            }
        }
    }

    public static class FirstPersonTriggerSerializedPropertyExtensions
    {
        // 拓展一个 获取 Trigger 的方法
        public static FirstPersonTriggerEnum GetTriggerEnum(this SerializedProperty property)
        {
            // 这里假设您有一个方法可以获取TriggerEnum的值  
            // 具体实现取决于您的TriggerEnum类的结构  
            return property.serializedObject.targetObject.GetType().GetField(property.name).GetValue(property.serializedObject.targetObject) as FirstPersonTriggerEnum;
        }
    }
#endif
}